﻿/*
 * ChsMS.exe  ---- 一个工具箱软件
 * Copyright (C) 2023 马中周
 *
 * 本程序是免费的;依据 apache2 协议。
 *
 * 这个程序是我自身的学习和实验性产品所以会有些生涩。不保证功能的适配，以及针对其他环境的适用性。
 *
 * 如果有幸想与我交流想法可以发邮件给我：my136@263.net
 *
 * */

#include "nameSpaces_cmst.h"

// 字符串结构分析 大小写字母 数字 标点符号
int cms::funIntOfCompositonAnalysis(const std::string a)
{
    // 返回值
    int varIntOfDetectionResult = 0;

    /*
     * 用来判定字符串构成的成分
     * */
    int hasLower = 0; // 小写字母
    int hasUpper = 0; // 大写字母
    int hasDigit = 0; // 数字
    int hasPunct = 0; // 标点符号

    // 判断字符串是否为空
    if(a.empty()){

        varIntOfDetectionResult = 2222;

        return varIntOfDetectionResult;
    }
    // 判断字符串是否超长
    if(a.size() > 4096){
        varIntOfDetectionResult = 4096;
        return varIntOfDetectionResult;
    }

    for (int i = 0; i < a.size();++i) {
        if (islower(a[i]))
            hasLower = 10;
        if (isupper(a[i]))
            hasUpper = 1;
        if (isdigit(a[i]))
            hasDigit = 100;
        if (ispunct(a[i]))
            hasPunct = 1000;
    }

    varIntOfDetectionResult = hasUpper + hasLower + hasDigit + hasPunct;

     return varIntOfDetectionResult;
}

// 判断字符串首字是否是字母或者数字
bool cms::funStrOfInitialDetection(const std::string a)
{
    // 返回值
    bool varBoolOfDetectionResult = false;

    if(a.empty()){
        return varBoolOfDetectionResult;
    }
    if(a.size()>4096){
        return varBoolOfDetectionResult;
    }

    if (isalpha(a[0]) || isdigit(a[0])) {
        varBoolOfDetectionResult = true;
    }
    else {
        varBoolOfDetectionResult = false;
    }

    return varBoolOfDetectionResult;
}
